#pragma once

#include "networkdefine.h"
#include "printdefine.h"


class Dcmdataset;

class IDCMPrint
{
public:
    ~IDCMPrint() = default;

public:
    virtual bool
    InitNetwork(
        const ServerInfo&                                  aServer
    ) = 0;

    virtual bool
    GetPrinterInfo(
        PrinterModule&                                     aPrinter
    ) = 0;

    virtual bool
    CreateFilmSessionBox(
        const FilmSessionBoxModule&                        aFilmSessionBox
    ) = 0;

    virtual bool
    CreateFilmBox(
        const FilmBoxModule&                               aFilmBox,
        bool                                               aSupportAnnotation,
        bool                                               aSupportPresentationLUT
    ) = 0;

    virtual bool
    CreatePresentationLUT(
        const PresentationLUTModule&                       aLut,
        unsigned long                                      aCount
    ) = 0;

    virtual bool
    GetPrintJob(
        PrintJobModule&                                    aPrintJob
    ) = 0;

    virtual bool
    SetImageBox(
        const ImageBoxModule& aImageBox,
        int                                               aFilmBoxNumber
    ) = 0;

    virtual bool
    SetAnnotationBox(
        const AnnotationBoxModule&                        aAnnotationBox
    ) = 0;

    virtual bool
    GetPrinterConfiguration(
        PrinterConfigurationModule&                       aPrinterConfiguration
    ) = 0;

    virtual bool
    PrintFilmSessionBox()
    = 0;

    virtual bool
    PrintFilmBox(
        int                                               aFilmBoxNumber
    ) = 0;

    virtual bool
    DeleteAllBox()
    = 0;

    virtual bool
    ReleaseNetwork()
    = 0;

    virtual bool
    CreateOpenCVImage(
        const ImageParameter&                              aImageParam,
        const CornerInfoV&                                 aCorner
    ) = 0;

    virtual bool
    SplicingOpenCVImage(
        const HeaderInfo&                                  aHeader,
        const CVType                                       aImageType,
        const std::string&                                 aPath
    ) = 0;
};
